package dao;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

import entities.PedidoVentaEntity;
import hibernate.HibernateUtil;

public class HibernatePedidoVentaBeanDAO 
{
	private static HibernatePedidoVentaBeanDAO instancia = null;
	private static SessionFactory sf = null;

	public static HibernatePedidoVentaBeanDAO getInstancia()
	{
		if(instancia == null)
		{
			sf = HibernateUtil.getSessionFactory();
			instancia = new HibernatePedidoVentaBeanDAO();
		} 
		return instancia;
	}
	
	public int grabarPedidoVenta( PedidoVentaEntity pedidoVenta )
	{
		Session session = sf.openSession();
		session.beginTransaction();
		
		session.persist(pedidoVenta);
		
		//obtener el id de la bd
		int idPedidoVenta = 1; //falta esto - sacar el ultimo id generado.
		
		session.flush();
		session.getTransaction().commit();
		session.close();
		
		return idPedidoVenta;
	}
	
	@SuppressWarnings("unchecked")
	public PedidoVentaEntity obtenerPedidoVentaPorId( int idPedidoVenta )
	{
		Session session = sf.openSession();
		Query query=session.createQuery("from PedidoVentaEntity pv where pv.id = :id");
		query.setParameter("id", idPedidoVenta );
		
		List<PedidoVentaEntity> pedidoVenta = query.list();
		session.close();
		return pedidoVenta.get(0);
	}

	public void actualizarPedidoVenta( PedidoVentaEntity pedidoVenta )
	{
		Session session = sf.openSession();
		session.beginTransaction(); 		
		session.saveOrUpdate(pedidoVenta);		
		session.getTransaction().commit();
        session.close();
	}
	
	public List<PedidoVentaEntity> obtenerPedidosVentaPorCliente( String cuit)
	{
		Session session = sf.openSession();
		Query query = session.createQuery("select s from PedidoVentaEntity pv join s.clienteEntity c where c.cuit = :cuit and pv.procesado = false");
		query.setParameter("cuit", cuit);
		@SuppressWarnings("unchecked")
		List<PedidoVentaEntity> sr = query.list();
		session.close();
		return sr;
	}
}
